package com.medusa.aps.business.modules.plan.mp.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.medusa.aps.business.model.pagination.Page;
import com.medusa.aps.business.modules.demand.model.input.ScheduleProcessDetailsParam;
import com.medusa.aps.business.modules.demand.model.output.ScheduleProcessDetailsVO;
import com.medusa.aps.business.modules.plan.model.input.ProcessDetailsParam;
import com.medusa.aps.business.modules.plan.model.output.ProcessDetailsVO;
import com.medusa.aps.business.modules.plan.mp.entity.ProcessDetails;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Set;

/**
 * 工序明细服务接口
 *
 * @author yuxh
 * @since 2023-08-14 17:37:48
 */
public interface ProcessDetailsService extends IService<ProcessDetails> {
    Page<ProcessDetailsVO> selectPage(Page<ProcessDetails> page, ProcessDetailsParam processDetails);

    /**
     * 根据设备 id 集合、  判断是否已生成相对 基准时间的 的未来的了工序计划
     *
     * @param equipmentIds 设备 id 集合
     * @param time         计算基准时间
     * @return true 已生成， false 未生成
     */
    boolean isExistProcessPlan(Set<Long> equipmentIds, LocalDateTime time);

    /**
     * 根据设备 id 集合、基准时间的 获取已生成的未来的了工序计划的设备 id 集合
     *
     * @param equipmentIds 设备 id 集合
     * @param time         计算基准时间
     * @return 已生成的未来的了工序计划的设备 id 集合
     */
    Set<Long> getExistProcessPlanEquipmentIds(Set<Long> equipmentIds, LocalDateTime time);

    /**
     * 根据设备id 日期 判断已排产设备在当天是否工作
     *
     * @param equipmentId 加工设备id
     * @param date        日期
     * @return 是否在指定日期已排产
     */
    Boolean isExistProcessPlanEquipment(Long equipmentId, LocalDate date);

    /**
     * 排程明细-工序明细
     *
     * @param scheduleProcessDetailsParam 参数
     * @return 结果
     */
    Page<ScheduleProcessDetailsVO> scheduleProcessDetail(ScheduleProcessDetailsParam scheduleProcessDetailsParam);

}

